package  
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	/**
	 * ...
	 * @author Eu
	 */
	public class Main extends MovieClip
	{
		
		var MC_tela : MovieClip = new MovieClip();
		var MC_nave : Nave;
		var MC_tiro: Tiro;
		var MC_inimigo: Inimigo;
		
		var BO_cima : Boolean = false;
		var BO_baixo : Boolean = false;
		var BO_esq : Boolean = false;
		var BO_dir : Boolean = false;
		var BO_space : Boolean = false
		
		var IN_delayTiro : int = 10;
		var IN_delayInimigo : int = 0;
		
		var AR_tiro : Array;
		var AR_inimigo : Array;
		
		public function Main() 
		{
			
			stage.addEventListener(Event.ENTER_FRAME, atualizar, false,0, true);
			stage.addEventListener(KeyboardEvent.KEY_DOWN, pressionar);
			stage.addEventListener(KeyboardEvent.KEY_UP, soltar)
			
			iniciarJogo();
			
			AR_tiro = new Array();
			AR_inimigo = new Array();
		}
		
		private function iniciarJogo():void 
		{
			
			addChild(MC_tela);
			
			MC_nave = new Nave();
			MC_nave.x = 20;
			MC_nave.y = stage.stageHeight / 2;
			MC_tela.addChild(MC_nave);
		
	    }
		
		public function atualizar(e:Event):void 
		{
			moverHeroi();
			criarInimigo();
			colidir();
			removerInimigo();
			removerTiro();
			
			for each (MC_inimigo in AR_inimigo)
			{
				MC_inimigo.AtualizarInimigo();
			}
			
			for each (MC_tiro in AR_tiro)
			{
				MC_tiro.AtualizarTiro();
			}
		}
		
		public function pressionar(e:KeyboardEvent) : void
		{
		switch(e.keyCode)
		  {
			case Keyboard.UP:
				BO_cima = true;
			break;
			
			case Keyboard.DOWN:
				BO_baixo = true;
			break;
			
			case Keyboard.RIGHT:
				BO_dir = true;
			break;
			
			case Keyboard.LEFT:
				BO_esq = true;
			break;
			
			case Keyboard.SPACE:
			   BO_space = true;
			break;
			
		  }
		}

		public function soltar(e:KeyboardEvent) : void
				{
					switch(e.keyCode)
					{
						case Keyboard.UP:
							BO_cima = false;
						break;
						
						case Keyboard.DOWN:
							BO_baixo = false;
						break;
						
						case Keyboard.RIGHT:
							BO_dir = false;
						break;
						
						case Keyboard.LEFT:
							BO_esq = false;
						break;
						
						case Keyboard.SPACE:
			                BO_space = false;
			            break;
						
					}
				}

		
				private function moverHeroi():void
			{
				if(BO_dir == true)
				{
					MC_nave.x += MC_nave.IN_velocidade;
				}
				
				if(BO_esq == true)
				{
					MC_nave.x -= MC_nave.IN_velocidade;
				}
				
				if(BO_cima == true)
				{
					MC_nave.y -= MC_nave.IN_velocidade;
					MC_nave.gotoAndPlay(15);
				}
				
				if(BO_baixo == true)
				{
					MC_nave.y += MC_nave.IN_velocidade;
					MC_nave.gotoAndPlay(1);
				}
				
				if (BO_space == true)
				{					
					IN_delayTiro --;
				      
					   if (IN_delayTiro <= 0)
					{
						atirar();
					}
				
				}
				
			 if (BO_cima == false && BO_baixo == false)
			 {
				 MC_nave.gotoAndStop(11);
			 }
				
			}
			
			private function atirar():void
			{
				MC_tiro = new Tiro();
				MC_tiro.x = MC_nave.x;
				MC_tiro.y = MC_nave.y;
				MC_tela.addChild(MC_tiro);
				AR_tiro.push(MC_tiro);
				
				IN_delayTiro = 5;
			}
			
			function criarInimigo():void
			{
				IN_delayInimigo --
				
				if (IN_delayInimigo <= 0)
				{
					MC_inimigo = new Inimigo();
					MC_inimigo.x = stage.stageWidth + MC_inimigo.width;
					MC_inimigo.y = Math.random() * 800;
					MC_tela.addChild(MC_inimigo);
					AR_inimigo.push(MC_inimigo);
					
					IN_delayInimigo = 10;
				}
			}
			
			public function colidir():void
			{
				for (var i:int = 0; i < AR_tiro.length; i++) 
				{
					for (var j:int = 0; j < AR_inimigo.length; j++) 
					{
						if (AR_tiro[i] != null && AR_inimigo[j] !=  null)
						{
							if (AR_tiro[i].hitTestObject(AR_inimigo[j]))
							{
								MC_tela.removeChild(AR_tiro[i]);
								MC_tela.removeChild(AR_inimigo[j]);
								AR_tiro.splice(i, 1);
								AR_inimigo.splice(j, 1);
							}
						}
					}
				}
			}
			
			public function removerInimigo():void
			{
				for (var n:int = 0; n < AR_inimigo.length; n++)
				 
				 if (AR_inimigo[n].x < 0)
				  {
					  MC_tela.removeChild(AR_inimigo[n]);
					  AR_inimigo.splice(n, 1);
				  }
			}
			
			public function removerTiro():void
			{
				for (var m:int = 0; m < AR_tiro.length; m++)
				 
				 if (AR_tiro[m].x > stage.stageWidth)
				  {
					  MC_tela.removeChild(AR_tiro[m]);
					  trace(AR_tiro);
					  AR_tiro.splice(m, 1);
				  }
			}
    }
}